Fix x86_64 smp boot:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 18 Oct 2005 10:07:55 +0000 (11:07 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 18 Oct 2005 10:07:55 +0000 (11:07 +0100)
    The local_setup_timer prototype was bad. The call from start
secondary() to it was calling with out the CPU parameter. Eventually the
CPU parameter received by the local_setup_timer is bogus (big negative
number). With such a big cpu number the per_cpu macro was trying to
access totally wrong memory location (per cpu data offset for big -ve no
cpu) causing the unhandled page fault. Because the dom0 was panicking
the error information on the serial console was also not going through,
giving just clueless hang.  With hyper call based debug statement I
could find out what was going wrong in the dom0.

Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smpboot.c

index b48b559a45f81ccc9dbcf80a6485e54ba2a1b7bc..8529c9e5db4d5ac95a441b301072f58759b779b3 100644 (file)
@@ -445,7 +445,7 @@ void __cpuinit smp_callin(void)
 }
 
 #ifdef CONFIG_XEN
-extern void local_setup_timer(void);
+extern void local_setup_timer(unsigned int cpu);
 #endif
 
 /*
@@ -478,7 +478,7 @@ void __cpuinit start_secondary(void)
 
        enable_APIC_timer();
 #else
-       local_setup_timer();
+       local_setup_timer(smp_processor_id());
        smp_intr_init();
        local_irq_enable();
 #endif